<?php

class Api_OfferController extends Zend_Rest_Controller
{
	
	private $db;
	private $xmlTemplate;

   public function init()
    {
        $this->_helper->layout()->disableLayout();
    	$this->_helper->viewRenderer->setNoRender(true);
    	
    	// Hole den standardmäßigen DB Adapter (definiert in der Boootstrap.ini)
		$this->db = Zend_Db_Table::getDefaultAdapter();
		
		//Hole xmlTemplate
		
		if (file_exists('/home/pascal/workspace/broker/XML/sicherheitsVorgaben.xml')){
    		$this->xmlTemplate = simplexml_load_file('/home/pascal/workspace/broker/XML/sicherheitsVorgaben.xml');
        		
		}
		else exit('XML Template not found!');
    	
    }
    
    private function authenticate(){
    	return;
    }

    
  	private function buildXMLfromOffer($offerSet){
  		
  		//XML AUFBAUEN
		//DienstSpezVorgaben
		$xml = $this->xmlTemplate;
		// SAAS
		$xml->dienstSpezVorgaben->softwareAsAService->commonCriteriaStufe = $offerSet[0]['commonCriteriaStufe'];
		$xml->dienstSpezVorgaben->softwareAsAService->nachrichtenIntegritaet = $offerSet[0]['nachrichtenIntegritaet'];
		$xml->dienstSpezVorgaben->softwareAsAService->nachrichtenVertraulichkeit = $offerSet[0]['nachrichtenVertraulichkeit'];
		
		// PAAS
		$xml->dienstSpezVorgaben->platformAsAService->updaterichtlinien = $offerSet[0]['updaterichtlinien'];
		
		// IAAS
		$xml->dienstSpezVorgaben->infrastructureAsAService->closeBoxVM = $offerSet[0]['closeBoxVM'];
		$xml->dienstSpezVorgaben->infrastructureAsAService->trustedPlatformModule = $offerSet[0]['trustedPlatformModule'];
		$xml->dienstSpezVorgaben->infrastructureAsAService->minimaleTrustedComputingBase = $offerSet[0]['minimaleTrustedComputingBase'];
		$xml->dienstSpezVorgaben->infrastructureAsAService->geographischerSpeicherOrt = $offerSet[0]['geographischerSpeicherOrt'];
		$xml->dienstSpezVorgaben->infrastructureAsAService->verschluesselung = $offerSet[0]['verschluesselung'];
		$xml->dienstSpezVorgaben->infrastructureAsAService->zugriffsrichtlinien = $offerSet[0]['zugriffsrichtlinien'];
		$xml->dienstSpezVorgaben->infrastructureAsAService->backupDataRecovery = $offerSet[0]['backupDataRecovery'];
		
		//DienstUberVorgaben
		$xml->dienstUeberVorgaben->metaDatenSchutz = $offerSet[0]['metaDatenSchutz'];
		$xml->dienstUeberVorgaben->enddienst = $offerSet[0]['enddienst'];
		$xml->dienstUeberVorgaben->logging = $offerSet[0]['logging'];
		$xml->dienstUeberVorgaben->trust->trustLevel = $offerSet[0]['trustLevel'];
		$xml->dienstUeberVorgaben->trust->trustArchitektur = $offerSet[0]['trustArchitektur'];
		
		$xml->dienstUeberVorgaben->credentialSchutz->credentialArt = $offerSet[0]['credentialArt'];
		$xml->dienstUeberVorgaben->credentialSchutz->credentialDynamik = $offerSet[0]['credentialDynamik'];
		
		//Compliance
		$xml->compliance->gesetzlicheRegelungen->datenschutz->EURichtlinien = $offerSet[0]['euRichtlinien'];
		$xml->compliance->gesetzlicheRegelungen->datenschutz->BundesDatenSchutz = $offerSet[0]['bundesDatenschutz'];
		$xml->compliance->gesetzlicheRegelungen->datenschutz->USA = $offerSet[0]['usa'];
		
		$xml->compliance->gesetzlicheRegelungen->archivierung = '1';
		
		$xml->compliance->anbieterExterneRegelungen->iso27001Zert = $offerSet[0]['iso27001Zert'];
		$xml->compliance->anbieterExterneRegelungen->iso27002 = $offerSet[0]['iso27002'];
		$xml->compliance->anbieterExterneRegelungen->bsiGrundschutz = $offerSet[0]['bsiGrundschutz'];
		$xml->compliance->anbieterExterneRegelungen->penetrationsTests = $offerSet[0]['penetrationsTests'];
		
		$xml->compliance->anbieterExterneRegelungen->domaenenSpezifisch->PCI = $offerSet[0]['pci'];
		$xml->compliance->anbieterExterneRegelungen->domaenenSpezifisch->GLBA = $offerSet[0]['glba'];
		$xml->compliance->anbieterExterneRegelungen->domaenenSpezifisch->HIPAA = $offerSet[0]['hipaa'];
		
		$xml->compliance->anbieterInterneRegelungen->qualifikationITSiBe = $offerSet[0]['qualifikationITSiBe'];
		
	
		return $xml;	
    	
  		
  	}

	public function indexAction()
    {
    	Zend_Debug::dump($this->getRequest()->getParam('id'));
         $this->getResponse()
            ->appendBody("From indexAction(), ProviderController returning all providers");
    }

    public function getAction()
    {
    	
    	$params = $this->getRequest()->getParams();
    	$profileid = $params['profile'];
    	
    	// DB Abfrage
    	  	
    	$select = new Zend_Db_Select($this->db);
    	$select->from(array('sp'=>'ServiceProfile'))
			->join(array('o'=>'Offers'), 'o.Offers_ID= sp.fk_Offers')
			->join(array('shp'=>'ServiceProvider_has_ServiceProfile'), 'shp.ServiceProfile_ID = sp.ServiceProfile_ID')
			->join(array('p' => 'ServiceProvider'), 'p.ServiceProvider_ID = shp.ServiceProvider_ID')
			->where('sp.ServiceProfile_ID=' .'"' . $profileid. '"' );
			
		$offerSet = $this->db->fetchAll($select);
		
		$xml = $this->buildXMLfromOffer($offerSet);
		
		
    	
        $this->getResponse()
        	
        	->setHttpResponseCode(200)
            ->appendBody($xml->asXML());
            

    }
    
    public function postAction()
    {
    	
    	
    	
    	
    	$this->getResponse()
    		->appendBody("OfferController, postAction")
    		->setHttpResponseCode(200);  	
    		
    		
    	

    }
    
	public function putAction()
    {
    	// Parameter holen
    	$params = $this->getRequest()->getParams();
    	$profileid = $params['profile'];
    	$xpathParam = $params['xpath'];
    	
    	// Parameter vorbereiten
    	
    	$change = explode('=', $xpathParam);
    	$path = $change[0];
    	$value = $change[1];
    	

    	 	
    	// Datenbankabfrage

    	$select = new Zend_Db_Select($this->db);
    	$select->from(array('sp'=>'ServiceProfile'))
			->join(array('o'=>'Offers'), 'o.Offers_ID= sp.fk_Offers')
			->join(array('shp'=>'ServiceProvider_has_ServiceProfile'), 'shp.ServiceProfile_ID = sp.ServiceProfile_ID')
			->join(array('p' => 'ServiceProvider'), 'p.ServiceProvider_ID = shp.ServiceProvider_ID')
			->where('sp.ServiceProfile_ID=' .'"' . $profileid. '"' );
			
		$offerSet = $this->db->fetchAll($select);
		
		
		// Änderung in der Datenbank übernehmen
		$offerID = $offerSet[0]['Offers_ID'];
		
		$offer = new OffersModel();
		$row = $offer->fetchRow('Offers_ID='. '"'. $offerID. '"');
		
		$column = str_replace("/", "", $path);
		$row->$column = $value;
		$row->save();
		
		// XML für Response aufbauen
		
		$xml = $this->buildXMLfromOffer($offerSet);
	
		
		$data = $xml->xpath($path);

		$data[0][0]=$value;
		//$xml->asXML('/opt/lampp/tmp/test.xml');
		$xmlchanged = $xml->asXML();
    	$this->getResponse()
    		->setHttpResponseCode(200)
            ->appendBody($xmlchanged);
    }
    
    
    
    public function deleteAction()
    {
    	
        $this->getResponse()
            ->appendBody("OfferController, delete Action");

    }


}

